home *** CD-ROM | disk | FTP | other *** search
- main()
- {
- char *error_ptr;
-
- if ((error_ptr = initialize()) != NULL)
- {
- fprintf(stderr, "error during %s", error_ptr);
- exit(1)
- }
- // processing ...
- (void) cleanup(2, NULL);
- exit(0);
- }
-
- int fd;
- char *buf;
-
- char *initialized(void)
- {
- if((buf = malloc(BUFSIZ)) == NULL)
- return cleanup(0, "malloc");
- // uses cleanup for consistency
- if ((fd = open("filename", O_RDONLY)) < 0)
- return cleanup(1, "open");
- if (read(fd, buf, sizeof(buf) < 0)
- return cleanup(2, "read");
- return NULL;
- }
-
- char *cleanup(int start_from, char *where_failed)
- {
- switch (start_from)
- {
- case 2:
- close(fd);
- case 1:
- free(buf);
- }
- // could instead print error message here
- // if where_failed ! = Null
- return where_failed;
- }
-
-